The present invention relates generally to the area of computer-aided design and computer-aided manufacturing (CAD/CAM) software, and specifically to a general object relationship management subsystem. More specifically, the present invention relates to a system that maintains data integrity when an object is modified, maintains referential integrity when an object is copied or deleted, defines the guidelines for programming behavior when an object is copied or deleted, encapsulates the details of how relationships are stored, and provides a mechanism for undoing or reversing actions taken on the object model through the relationship management system.
Object Linking and Embedding (OLE) Overview
Within the office environment, one method that has been developed to enable "cutting" and "pasting" of data between software applications is OLE. OLE defines standardized interfaces and functions enabling users to transfer objects supporting the Component Object Model (COM) between software applications. The following section is an abbreviated overview of some of the concepts used in COM and OLE version 2.0, from Microsoft Corporation of Belleview, Wash., and defines some of the terms that will be used in the disclosure. Further information and details about COM and OLE may be obtained from "Inside OLE 2" by Kraig Brockschmidt, 1994, Microsoft Press, hereby incorporated by reference.
An example of cutting and pasting data between software applications is illustrated in FIG. 1. FIG. 1 illustrates a two-dimensional object 1 created in a first software application being transferred into a second software application. The first and second software applications (not shown) are commonly specialized software applications such as spread-sheets, word processors, or graphics programs. Once two-dimensional object 1 has been transferred, the second software application can manipulate its own data, two-dimensional object 2, so that two-dimensional object 2 interacts with two-dimensional object 1. The resulting document is then output to the user.
OLE provides a set of "interfaces", or groups of functions, which when combined provide the mechanics enabling the user to transfer data between programs. FIG. 2 illustrates the convention for representing an OLE interface 10, for an object 11 and a "consumer" 12 of the object. Object 11 is said to have an "interface implementation", including interfaces 13 and 14, that are analogous to an object oriented programming "class." Interfaces 13 and 14 include member functions 15 and 16, respectively, that are analogous to object oriented programming class "instances".
Consumer 12 receives data from object 11 by calling functions of interface 13 and/or interface 14. In some cases the consumer may only be aware of one of several interfaces available in an object. In response to the function calls, object 11 may return specific data about itself to the consumer 12. Object 11, however maintains exclusive control of its own data 17. As further illustrated in FIG. 2, IUnknown is an interface available to all objects, that when queried for specific interfaces, returns pointers to the requested interface. For example, assuming consumer 12 knows which functions are available in interface 14, consumer 12 can ask for and receive a pointer to interface 14. Then, once consumer 12 receives a pointer to interface 14, consumer 12 can call member functions 16.
CAD/CAM Market Overview
Application software specifically designed for architectural and engineering and mechanical design and fabrication purposes are commonly labeled Computer Aided Design (CAD) and Computer Aided Manufacturing (CAM) software. Some of the standard features of CAD/CAM applications is the ability to create and manipulate three-dimensional objects and to create relationships between three-dimensional objects relative to other three-dimensional objects.
CAD/CAM applications typically fall into generic types, those built upon a standard graphics platform where data and code is shared among many applications and proprietary applications which have very little in common with other CAD/CAM applications. Within the domain of applications built on generic graphics platforms some have crude capabilities for defining relationships between CAD objects. Typically the user must place objects in a location that represents the results of a relationship acting on that object, that is, the user performs the computation external to the application to determine the physical location of the new object. In many proprietary applications, there exist software that manages geometric relationships between CAD objects. Typically, these capabilities (called constraint management capabilities) allow for the definition of geometric constraints on CAD objects and between CAD objects. For example, a typical constraint between two CAD objects is maintaining a given distance between the objects or maintaining one face parallel to another face. One problem with these type of limited constraint management systems is that they only represent spatial relationships and they cannot model or maintain a more general class of relationships.
CAD/CAM Applications and Database Structures
In the past, CAD/CAM software applications included specialized software which allowed for the modeling of a limited set of relationships between objects. In many cases CAD/CAM systems did not model general relationships at all and only allowed the user to define positional relationships which essentially placed objects at specific coordinates in 3D space. In some systems "constraint management" capabilities have been added, however these are restricted to only modeling and managing geometric relationships between objects. Other relationship types that needed to be in the model were handled in an ad hoc manner by the user as CAD/CAM applications did not have generalized relationship modeling and maintenance capabilities.
What is needed is a relationship management subsystem that allows generalized relationships (including geometric relationships commonly present in current CAD/CAM systems) to be defined and that maintains the integrity of the object model.